//
//  HACTableviewSection.m
//  HACDispatcher
//
//  Created by Chengjie on 2019/5/7.
//

#import "HACTableviewSection.h"
#import "HACTableViewCellProtocol.h"
#import "UITableView+HACDispatcher.h"

@interface HACTableviewSection ()

@end

@implementation HACTableviewSection

- (void)registTableReusableView {
    // 在这里注册tableView的cell&header&footer
    NSCAssert(0, @"子类必须重写该方法注册tableView的cell&header&footer", NSStringFromSelector(_cmd));
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.cellModels.count;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row < self.cellModels.count) {
        return [self.cellModels objectAtIndex:indexPath.row].cellHeight;
    }
    return UITableViewAutomaticDimension;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row < self.cellModels.count) {
        NSString *idfs = [self.cellModels objectAtIndex:indexPath.row].reusableIdentifier;
        UITableViewCell<HACTableViewCellProtocol> *cell = [tableView dequeueReusableCellWithIdentifier:idfs];
        if ([cell conformsToProtocol:@protocol(HACTableViewCellProtocol)]) {
            [cell configCellModel:self.cellModels[indexPath.row]];
        }
        return cell;
    }
    return [[UITableViewCell alloc] init];
}

- (void)reloadSection {
    [self.tableView.hac_dispatcher reoloadDataWithImplementor:self];
}

- (NSUInteger)sectionIndex {
    return [self.tableView.hac_dispatcher indexOfImplementor:self];
}


- (HACTableviewSection *)prefixSection {
    return [self.tableView.hac_dispatcher implementorAtIndex:self.sectionIndex - 1];
}

- (HACTableviewSection *)suffixSection {
    return [self.tableView.hac_dispatcher implementorAtIndex:self.sectionIndex + 1];
}

- (NSMutableArray<id<HACTableViewCellModelProtocol>> *)cellModels {
    if (!_cellModels) {
        _cellModels = [NSMutableArray array];
    }
    return _cellModels;
}

@end
